package com.wpw.java7demo.exception;

/**
 * 如果在try语句块中抛出了异常，在控制权转移到调用栈上一层代码之前，finally语句块中的语句也会执行。
 * 但是finally语句块在执行的过程中，也可能会抛出异常。
 * 如果finally语句块也抛出了异常，那么这个异常会往上传递，而之前try语句块中的那个异常就丢失了
 * @author admin
 *
 */
public class ExceptionTest {
    public void show() throws BaseException {
        try {
            Integer.parseInt("Hello");
        } catch (NumberFormatException e1) {
            throw new BaseException(e1);
        } finally {
           //1.
        	/* try {
                int result = 2 / 0;
            } catch (ArithmeticException e2) {
                throw new BaseException(e2);
            }*/
        	
        	//一种解决方法是抛出try语句块中产生的原始异常，忽略在finally语句块中产生的异常。这么做的出发点是try语句块中的异常才是问题的根源。
        	try {
				int result = 2 / 0;
			} catch (Exception e) {
				e.printStackTrace();
			}
        }
    }
    
    public static void main(String[] args) throws Exception {
    	ExceptionTest d = new ExceptionTest();
        d.show();
    }
}
 
class BaseException extends Exception {
    public BaseException(Exception ex){
        super(ex);
    }
    private static final long serialVersionUID = 3987852541476867869L;
}
